﻿#ifndef SIGNALEDIT_H
#define SIGNALEDIT_H

#include <QWidget>
#include <QMap>
#include <QMessageBox>
#include <QStandardItemModel>

namespace Ui {
class SignalEdit;
}

class SignalEdit : public QWidget
{
    Q_OBJECT

public:
    explicit SignalEdit(QWidget *parent = nullptr);
    ~SignalEdit();
    /**
     * @brief getselectedTopicId 设置所选行的主题Id
     * @param selectedTopicId 所选主题Id
     */
    void setselectedTopicId(const QVariant &selectedTopicId);

signals:
    /**
     * @brief sgl_ShowStructDisplay 显示结构体配置界面
     * @param index 界面索引
     */
    void sgl_ShowStructDisplay(const int &index);
    /**
     * @brief sgl_GetSelectedTopicId 获取当前选中项的主题Id
     * @return 主题Id
     */
    int sgl_GetSelectedTopicId();
    /**
     * @brief sgl_AddSignal 添加信号
     * @param topicId 该信号所属的主题Id
     * @return 该信号的信息
     */
    QVector<QVariant> sgl_AddSignal(const int &topicId);
    /**
     * @brief sgl_DeleteSignal 删除信号
     * @param topicId 主题Id
     * @param signalId 信号Id
     */
    void sgl_DeleteSignal(const int &topicId, const QVariant &signalId);
    /**
     * @brief sgl_SignalCellValueChanged 信号单元格内容改变事件
     * @param rowId 行Id(即SignalId)
     * @param columnIndex 列索引
     * @param value 改变后的值
     */
    int sgl_SignalCellValueChanged(const QVariant &rowId, const int columnIndex,const QVariant &value);
    /**
     * @brief sgl_GetSignalRowData 获取信号行数据
     * @param rowId 行Id
     * @return 该行Id的整行数据
     */
    QVector<QVariant> sgl_GetSignalRowData(const QVariant &rowId);

private slots:
    /**
     * @brief on_pushButton_addStruct_clicked 添加结构体
     */
    void on_pushButton_addStruct_clicked();
    /**
     * @brief on_pushButton_addSignal_clicked 添加信号
     */
    void on_pushButton_addSignal_clicked();
    /**
     * @brief on_pushButton_delete_clicked 删除信号
     */
    void on_pushButton_delete_clicked();
    /**
     * @brief on_pushButton_up_clicked 信号上移
     */
    void on_pushButton_up_clicked();
    /**
     * @brief on_pushButton_down_clicked 信号下移
     */
    void on_pushButton_down_clicked();
    /**
     * @brief on_lineEdit_search_textChanged 搜索文本改变
     * @param arg1 搜索文本
     */
    void on_lineEdit_search_textChanged(const QString &arg1);
    /**
     * @brief on_pushButton_comfirm_clicked 确认
     */
    void on_pushButton_comfirm_clicked();
    /**
     * @brief slt_SignalCellValueChanged 单元格值改变
     * @param rowId 行Id
     * @param columnIndex 列索引
     * @param value 改变后的值
     * @return 结果码
     */
    int slt_SignalCellValueChanged(const QVariant &rowId, const int columnIndex,const QVariant &value);

private:
    Ui::SignalEdit *ui;
    //! 结果码对应的文本信息
    QVector<QString> m_ResultTextVec;
    //! 所选主题Id
    QVariant m_SelectedTopicId;

private:
    /**
     * @brief initSignalTreeView 初始化信号树
     */
    void initial();
};

#endif // SIGNALEDIT_H
